import time

from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException
from base.base import Base
from tools.get_log import GetLog

logger = GetLog.get_logger()


class AppBase(Base):
    # 1.查找页面是否存在指定元素
    def app_base_is_exist(self, loc):
        try:
            # 1.调用登录方式
            self.base_find(loc, timeout=3)
            logger.info('找到:{}元素啦---'.format(loc))
            # 2，输出信息
            print('找到:{}元素啦---'.format(loc))
            # 3.返回true
            return True
        except:
            logger.error('未找到{}元素---'.format(loc))
            print('未找到{}元素---'.format(loc))
            return False
            # 抛异常
            raise

    # 2.从右向左滑动屏幕
    def app_base_right_wipe_left(self, loc_area, click_text):
        logger.info('正在调用 从右向左滑动方法')
        # 1.查找区域元素
        el = self.base_find(loc_area)
        # 2.获取区域元素的位置 y坐标点
        y = el.location.get('y')
        # 3.获取区域元素宽高
        width = el.size.get('width')
        height = el.size.get('height')
        # 4.计算start_x,end_x,start_y,end_y
        start_x = width * 0.8
        start_y = y + height * 0.5
        end_x = width * 0.1
        end_y = start_y
        # 组合TAB标签元素配置信息
        # loc = By.XPATH, "//*[@class='android.widget.HorizontalScrollView']//*[contains(@text,'{}')]".format(click_text)
        loc = By.XPATH, "//android.widget.HorizontalScrollView//*[contains(@text,'{}')]".format(click_text)
        # 5.循环
        while True:
            # 1.获取当前屏幕页面结构
            page_source = self.driver.page_source
            # 2.捕获异常
            try:
                # 1.查找元素
                time.sleep(0.5)
                el = self.base_find(loc, timeout=2.5)
                # 2.输出提示信息
                print('找到：{}元素了'.format(loc))
                time.sleep(1)
                # 3.点击元素
                el.click()
                # 4.跳出循环
                break
            # 3.处理异常
            except:
                # 1.输出提示信息
                print('未找到：{}元素'.format(loc))
                # 2.滑动屏幕
                self.driver.swipe(start_x, start_y, end_x, end_y, duration=1000)
            # 4.判断是否为最后一页
            if page_source == self.driver.page_source:
                # 1.输出提示信息
                print('滑到最后一屏幕，未找到元素!')
                # 2.抛出未找到元素异常
                raise NoSuchElementException

    # 3.从下向上滑动屏幕
    def app_base_down_wipe_up(self, loc_area, click_text):
        logger.info('正在调用 从下向上滑动方法')
        # 1.查找区域元素
        el = self.base_find(loc_area)
        # 2.获取区域元素宽高
        width = el.size.get('width')
        height = el.size.get('height')
        # 4.计算start_x,end_x,start_y,end_y
        start_x = width * 0.5
        start_y = height * 0.8
        end_x = width * 0.5
        end_y = height * 0.2
        # 组合TAB标签元素配置信息
        # loc = By.XPATH, "//*[@class='android.widget.HorizontalScrollView']//*[contains(@text,'{}')]".format(click_text)
        loc = By.XPATH, "//*[@bounds='[0,386][1080,2278]']//*[contains(@text,'{}')]".format(click_text)
        # 5.循环
        while True:
            # 1.获取当前屏幕页面结构
            page_source = self.driver.page_source
            # 2.捕获异常
            try:
                # 1.查找元素
                el = self.base_find(loc, timeout=3)
                # 2.输出提示信息
                print('找到：{}元素了'.format(loc))
                # 3.点击元素
                el.click()
                # 4.跳出循环
                break
            # 3.处理异常
            except:
                # 1.输出提示信息
                print('未找到：{}元素'.format(loc))
                # 2.滑动屏幕
                self.driver.swipe(start_x, start_y, end_x, end_y, duration=1500)
            # 4.判断是否为最后一页
            if page_source == self.driver.page_source:
                # 1.输出提示信息
                print('滑到最后一屏幕，未找到元素!')
                # 2.抛出未找到元素异常
                raise NoSuchElementException

    # 点击手机键盘搜索按钮
    def app_base_click_search(self):
        try:
            logger.info('正在调用手机键盘搜索方法')
            self.driver.keyevent(66)
        except Exception as e:
            logger.info('调用手机键盘搜索方法失败，失败原因{}'.format(e))
            raise





